巴斯卡三角形(杨辉三角)

参考资料:
1.
巴斯卡三角的来历
2.
巴斯卡是十七世纪的一位法国数学家,也是历史上第一位发明了加法计算机的人!他造出“巴斯卡三角形”的方法是这样的:先在纸上写出一行和一列的“ 1 “ ,然后在各个位置中填入数字,每一个位置上的数字都是它上面一个数和左边一个数的和。接下来,把这个表右转45 ° ,放正了,就得到上面的数字三角形了!
3.
现在的数学书里,都把这个三角形称为“巴斯卡三角形” ,事实上,在南宋杨辉所写的数学书里面,早就介绍了由北宋贾宪所创造出来的相同三角形了(所以在中国称为“贾宪三角”或“杨辉三角” ) ,时间可要比巴斯卡早了600年。
组合数计算方法:C(n,m)=n!/[m!(n-m)!]

#include <stdio.h>
#define N 12
long combi(int n, int r)
{
    int i;
    long p = 1;
    for(i = 1; i <= r; i++)
        p = p * (n-i+1) / i;
    //这里没有采用斯巴卡三角形的特性,
    //即下数等于上面两数之和,而是通过行列的关系推出。
    //当然也可以利用二维数组计算,利用下数等于上面两数之和。
    return p;
}/**上述程序是解决巴斯卡三角形问题的递归方程式。
在主函数中依次combi(0,0)->combi(1,0)->combi(1,1)->combi(2,0)->combi(2,1)->combi(3,1)->其实很简单,
就是这样一个过程,公式是经过推导的,有兴趣也可以自己推导!
这种问题没有为什么,就只有怎么做到!combi(0,0)->combi(1,0)->combi(1,1)->combi(2,0)->combi(2,1)->combi(3,1)->.
把这些代入得出p并且输出!
懂得如何实现就可以了!高深一点,
就要学会自己推导公式,也就是真正算法的精髓。**/
int main()
{
    int n, r, t;
    for(n = 0; n <= N; n++)
    {
        for(r = 0; r <= n; r++)
        {
            int i;/* 排版设定开始 */
            if(r == 0)
            {
                for(i = 0; i <= (N-n); i++)
                    printf("   ");
            }
            else
            {
                printf("   ");

            } /* 排版设定结束 */
            printf("%3d", combi(n, r));
        }
        printf("\n");
    }
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谙忆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值